package com.untour.im.codec.protocol.handler;


import com.untour.im.codec.constants.IMConstants;
import com.untour.im.codec.protocol.message.body.MessageBody;
import com.untour.im.codec.protocol.packet.codec.RequestPacketCodec;
import com.untour.im.codec.protocol.packet.request.PacketData;
import com.untour.im.codec.protocol.packet.request.header.RequestPacketHeader;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * 消息解码
 */
@Slf4j
public class RequestMessageDecoderHandler extends ByteToMessageDecoder {

    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf byteBuf, List<Object> out) throws Exception {
        //请求头（
        // 指令
        // 版本
        // clientType
        // 消息解析类型
        // appId
        // imei长度
        // bodylen
        // ）+ imei号 + 请求体

        if (byteBuf.readableBytes() < IMConstants.CLIENT_PROTOCOL_HEADER_LENGTH) {
            return;
        }

        PacketData<RequestPacketHeader,MessageBody> packetData = RequestPacketCodec.INSTANCE.decode(byteBuf);
        if (packetData == null) {
            log.warn("本次读取数据不完整，下次再读取");
            return;
        }
        out.add(packetData);
    }
}
